package per.chenyl.framework.persistence.wrapper;

import java.util.HashMap;

public interface Wrapper<T> {
    void setEntity(T entity);

    T getEntity();


    String getCondition();

    /**
     * @param colums 查询的列，用逗号隔开 格式：col1,col2,col3,...
     * @return Wrapper
     * @desc 查询需要的列
     * @method select
     * @author YulinChen
     * @date 2020/4/24 20:14
     */
    Wrapper<T> select(String colums);

    Wrapper<T> limit(int count);

    /**
     * 等于
     *
     * @param column 列
     * @param value  值
     * @return Wrapper
     */
    Wrapper<T> eq(String column, Object value);

    /**
     * 不等于
     *
     * @param column 列
     * @param value  值
     * @return Wrapper
     */
    Wrapper<T> ne(String column, Object value);

    /**
     * 小于
     *
     * @param column 列
     * @param value  值
     * @return Wrapper
     */
    Wrapper<T> lt(String column, Object value);

    /**
     * 大于
     *
     * @param column 列
     * @param value  值
     * @return Wrapper
     */
    Wrapper<T> gt(String column, Object value);

    /**
     * 大于等于
     *
     * @param column 列
     * @param value  值
     * @return Wrapper
     */
    Wrapper<T> ge(String column, Object value);

    /**
     * 小于等于
     *
     * @param column 列
     * @param value  值
     * @return Wrapper
     */
    Wrapper<T> le(String column, Object value);

    Wrapper<T> like(String column, Object value, AbstractWrapper.Like like);

    /**
     * 查询专用
     *
     * @param column 列
     * @param desc   是
     * @return
     */
    Wrapper<T> orderBy(String column, boolean desc);


    /**
     * 查询专用
     *
     * @param columns 列
     * @return
     */
    Wrapper<T> batchOrderBy(HashMap<String, Boolean> columns);

    Object[] getValues();


    /**
     * 查询专用
     *
     * @return
     */
    boolean isUseSelect();

    /**
     * 批量删除用
     *
     * @return
     */
    String getBatchSql();

    /**
     * 批量删除用
     *
     * @return
     */
    Object[] getBatchDeleteValues();
}
